#include "std_msgs/String.h"
#include <sstream>
#include <ros/ros.h>
#include <nav_msgs/Odometry.h>
#include <tf/transform_broadcaster.h>
#include "robotControl/WStatus.h" //define the message type of WStatus for wifibot
#include "robotControl/vn100_msg.h" //define the message type of vn100
#include <boost/thread.hpp> // for async threads

#define PI 3.14159265


typedef double ODOMETRY; //Define new type for odometry
typedef  float DISTANCE; //Define new type for distances
typedef  double COORDINATE; //Define new type for CoOrdinates
typedef  double BEARING; //Define new type for Bearing


class wifibotPosition{
public:
  
     // Create an publisher object for publishing the position
    static ros::Publisher _positionWifibotPublisher;
    
    //Create a message object for the publishing the Wifibot Status 
    static robotControl::WStatus wifibotGlobalStatus;
   //Create a message object for the publishing the VN Orientation Status 
    static robotControl::vn100_msg vnGlobalStatus;
     //Create a message object for the publishing the Wifibot position 
    static nav_msgs::Odometry wifibotPose;

    //Declare Subscriber for the Robot Status
    static ros::Subscriber subscriberStatus;
    //Declare Subscriber for VectorNav
    static ros::Subscriber subscriberVN100;
     
    //Callback function for the robot status subscriber
      void statusCallback(robotControl::WStatus msg);
    //Callback function for the vectornav subscriber
      void vnStatusCallback(robotControl::vn100_msg msg);
        
      // Move the calculating the robot position according to odometry and yaw values
    static int CalculatePosition();

};